package cn.seaboot.admin.user.context;

import cn.seaboot.admin.user.bean.User;
import cn.seaboot.commons.exception.BizException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 鉴权上下文，用于处理登录相关的功能
 *
 * @author Mr.css
 * @version 2022-06-01 16:27
 */
public interface AuthorityContext {
    /**
     * 用户登录
     * <p>
     * 将用户鉴权相关的配置，加入到会话中
     *
     * @param request request
     * @param user    用户
     */
    void login(HttpServletRequest request, HttpServletResponse response, User user);

    /**
     * 用户登出
     * <p>
     * 清除用户会话
     *
     * @param request request
     * @param user    用户
     */
    void logout(HttpServletRequest request, HttpServletResponse response, User user);

    /**
     * 生成密码，用于账号注册，不同的框架下，这一部分的设计不同
     *
     * @param user     用户，需要在当前函数中，生成用户密码
     * @param password 密码
     */
    void generatePassword(User user, String password);

    /**
     * 验证密码是否与用户匹配
     *
     * @param user     用户
     * @param password 密码
     * @throws BizException 账号或密码错误
     */
    void matchPassword(User user, String password) throws BizException;
}
